// ===========================================================================
// Copyright (c) 2011-2020 Anlogic Inc. All Right Reserved.
//
// TEL: 86-21-61633787
// WEB: http://www.anlogic.com/
// ===========================================================================
//
//
//  
//
//
// ===========================================================================


module reset_sync 
#(
  parameter INITIALISE = 2'b11  // 表示两个触发器都初始化为高电平。
)
(
   input       reset_in,
   input       clk,
   input       enable,
   output      reset_out
);


wire  reset_stage1;
wire  reset_stage2;


// FDPE（Flip-Flop with Dual-Port Embedded）是一种在FPGA中使用的存储资源，它是一个具有双端口功能的触发器（Flip-Flop）
// 带有时钟使能和异步置位的D触发器 相比于FDSE不需要等到时钟的上升沿，即刻可进行置位。
  FDPE #(
   .INIT (INITIALISE[0])
  ) reset_sync1 (
    .C  (clk), 
    .CE (enable),           // 表示当 enable 为 1 时，触发器将在时钟边沿捕获数据输入 D 的值。
    .PRE(reset_in),         // 表示当 reset_in 为 1 时，触发器的输出 Q 将立即置为1，而不需要等待时钟边沿。
    .D  (1'b0),             // 是数据输入端，这里设置为0，表示我们希望在复位时将触发器清零。
    .Q  (reset_stage1)      // 
  );
  
  FDPE #(
   .INIT (INITIALISE[1])
  ) reset_sync2 (
    .C  (clk), 
    .CE (enable),
    .PRE(reset_in),
    .D  (reset_stage1),
    .Q  (reset_stage2) 
  );


assign reset_out = reset_stage2;



endmodule
